layui.use(['table', 'layer', 'form'], function () {
    const table = layui.table;
    const layer = layui.layer;
    const form = layui.form;

    // 初始化加载学生列表
    loadStudentList();

    // 表单验证
    form.verify({
        required: function (value) {
            if (!value) {
                return '该字段不能为空';
            }
        },
        number: function (value) {
            if (!/^\d+$/.test(value)) {
                return '请输入有效的数字';
            }
        }
    });

    // 加载学生列表
    function loadStudentList() {
        table.render({
            elem: '#studentTable', // 表格的 DOM 元素选择器
            url: '/api/student/getbypage', // 数据接口的 URL
            method: 'POST', // 请求方法
            contentType: 'application/json',
            where: {data: {}}, // 默认请求参数
            cols: [[ // 表头配置
                { type: 'checkbox', fixed: 'left' }, // 添加复选框列
                { field: 'id', title: 'ID', sort: true }, // 每列的配置
                { field: 'name', title: '姓名' },
                { field: 'sex', title: '性别', sort: true, templet: function (d) {
                        return d.sex === 1 ? '男' : d.sex === 2 ? '女' : '未知';
                    } },
                { field: 'age', title: '年龄', sort: true },
                { field: 'sno', title: '学号' },
                { title: '操作', toolbar: '#editTemplate', fixed: 'right' } // 操作列，绑定工具栏模板
            ]],
            page: true, // 开启分页功能
            limits: [10, 20, 30, 50],
            limit: 10,
            parseData: function(res){ // 数据格式化
                return {
                    "code": 0,
                    "msg": "",
                    "count": res.count,
                    "data": res.data
                };
            },
            done: function (res, curr, count) {
                console.log(res); // 数据加载完成后的回调，可以在这里处理数据
            }
        });
    }

    // 显示学生新增或编辑对话框
    window.showStudentDlg = function (id) {
        const title = id ? "编辑学生信息" : "新增学生信息";
        const formData = id ? { id: id } : {};

        layer.open({
            type: 1,
            area: ['400px', '450px'],
            title: title,
            content: $("#studForm"),
            success: function (layero, index) {
                if (id) {
                    // 如果是编辑，加载学生信息
                    $.ajax({
                        url: "/api/student/" + id,
                        method: "GET"
                    }).done(function (student) {
                        form.val('studForm', student);
                    }).fail(function () {
                        layer.msg("加载学生信息失败！", { icon: 2, time: 2000 });
                    });
                } else {
                    // 如果是新增，清空表单
                    form.val('studForm', {});
                }
            },
            btn: ['确定', '取消'],
            yes: function (index, layero) {
                form.submit('studForm');
            },
            btn2: function (index, layero) {
                layer.close(index);
            }
        });
    };

    // 表单提交（新增或编辑）
    form.on('submit(studForm)', function (data) {
        const formData = data.field;
        const id = formData.id || null;

        if (id) {
            // 编辑操作
            $.ajax({
                url: "/api/student/update",
                method: "PUT",
                contentType: "application/json",
                data: JSON.stringify(formData),
                dataType: "json"
            }).done(result => {
                if (result.code === 0) {
                    layer.closeAll();
                    loadStudentList();
                    layer.msg("学生信息更新成功！", { icon: 1, time: 2000 });
                } else {
                    layer.msg("更新失败：" + result.msg, { icon: 2, time: 2000 });
                }
            }).fail((jqXHR, textStatus, errorThrown) => {
                console.error("Request failed:");
                console.error("Status:", textStatus);
                console.error("Error:", errorThrown);
                console.error("Response:", jqXHR.responseText);
                layer.msg("发生错误，请稍后重试！", { icon: 2, time: 2000 });
            });
        } else {
            // 新增操作
            $.ajax({
                url: "/api/student/add",
                method: "POST",
                contentType: "application/json",
                data: JSON.stringify(formData),
                dataType: "json"
            }).done(result => {
                if (result.code === 0) {
                    layer.closeAll();
                    loadStudentList();
                    layer.msg("学生信息添加成功！", { icon: 1, time: 2000 });
                } else {
                    layer.msg("添加失败：" + result.msg, { icon: 2, time: 2000 });
                }
            }).fail((jqXHR, textStatus, errorThrown) => {
                console.error("Request failed:");
                console.error("Status:", textStatus);
                console.error("Error:", errorThrown);
                console.error("Response:", jqXHR.responseText);
                layer.msg("发生错误，请稍后重试！", { icon: 2, time: 2000 });
            });
        }
        return false; // 阻止表单默认提交
    });

    // 删除学生信息
    window.deleteConfirm = function () {
        const checkStatus = table.checkStatus('studentTable');
        const data = checkStatus.data;

        if (data.length === 0) {
            layer.msg("请选择要删除的学生！", { icon: 2, time: 2000 });
            return;
        }

        layer.confirm("确定要删除所选学生吗？", {
            icon: 3,
            btn: ["确定", "取消"]
        }, function (index) {
            const ids = data.map(item => item.id);
            $.ajax({
                url: "/api/student/delete",
                method: "DELETE",
                contentType: "application/json",
                data: JSON.stringify(ids),
                dataType: "json"
            }).done(result => {
                if (result.code === 0) {
                    layer.close(index);
                    loadStudentList();
                    layer.msg("删除成功！", { icon: 1, time: 2000 });
                } else {
                    layer.msg("删除失败：" + result.msg, { icon: 2, time: 2000 });
                }
            }).fail(() => {
                layer.msg("删除失败，请稍后重试！", { icon: 2, time: 2000 });
            });
        });
    };

    // 查询学生信息
    window.search = function () {
        const formData = getSearchCondition();
        if (Object.keys(formData).length === 0) {
            layer.msg("请输入查询条件！", { icon: 2, time: 2000 });
            return;
        }
        table.reload('studentTable', {
            where: {data: formData},
            page: {
                curr: 1 // 重新从第一页开始
            }
        });
    };

    // 获取查询条件
    function getSearchCondition() {
        const formData = {};
        $('#queryForm').find('input,select').each(function () {
            const name = $(this).attr('name');
            const value = $(this).val();
            if (name && value) {
                formData[name] = value;
            }
        });
        return formData;
    }

    // 行操作绑定事件
    table.on('tool(studentTable)', function(obj){
        const data = obj.data; // 当前行的数据
        const layEvent = obj.event; // 获取 lay-event 对应的值
        const tr = obj.tr; // 获取当前行 tr 的 DOM 对象

        if(layEvent === 'edit'){
            // 编辑操作
            showStudentDlg(data.id);
        }
    });
});